﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Com.Toook.ParseHtml.Enum
{
    /// <summary>
    /// Elements的解析类型
    /// </summary>
    public enum GetBy 
    {
        /// <summary>
        /// 根据ID获取元素
        /// </summary>
        Id,
        /// <summary>
        /// 根据css类名获取元素
        /// </summary>
        Class,  
        /// <summary>
        /// 根据html标签获取元素
        /// </summary>    
        Tag,            
        /// <summary>
        /// 元素/子元素 包含指定文本
        /// </summary>
        ContainText,    
        /// <summary>
        /// 元素自身 包含指定文本
        /// </summary>
        ContainOwnText, 
        /// <summary>
        /// 元素/子元素 匹配正则表达式指定的文本
        /// </summary>
        MatchText,    
        /// <summary>
        /// 元素/子元素 匹配正则表达式指定的文本
        /// </summary>
        MatchOwnText,   
        /// <summary>
        /// 根据属性名获取
        /// </summary>
        Attr,
        /// <summary>
        /// 根据属性名开始字符串获取
        /// </summary>  
        AttrStart,      
        /// <summary>
        /// 获取第n个元素
        /// </summary>
        IndexEquals,    
        /// <summary>
        /// 获取小于n的元素
        /// </summary>
        IndexLessThan,  
        /// <summary>
        /// 获取大于n的元素
        /// </summary>
        IndexGreaterThan,
        /// <summary>
        /// 获取当前元素的下一个兄弟元素
        /// </summary>
        NextElementSibling,
        /// <summary>
        /// 获取当前元素的前一个兄弟元素
        /// </summary>
        PreviousElementSibling,
        /// <summary>
        /// 根据(key,value)属性名，属性值获取元素
        /// </summary>
        AttrValue,
        /// <summary>
        /// 根据(key,value)属性名，属性值开始字符串获取元素
        /// </summary>
        AttrValueStart,
        /// <summary>
        /// 根据(key,value)属性名，属性值结束字符串获取元素
        /// </summary>
        AttrValueEnd,
        /// <summary>
        /// 根据(key,value)属性名，属性值包含的字符串获取元素
        /// </summary>
        AttrValueContain,
        /// <summary>
        /// 根据(key,value)属性名，属性值匹配的正则表达式获取元素
        /// </summary>
        AttrValueMatch,
        /// <summary>
        /// 详细页面地址中包含当前日期
        /// </summary>
        AttrValueContainDateNow,

        #region 过滤Step同级元素
        /// <summary>
        /// 有指定的属性值。xml中指定name="attrName"
        /// </summary>
        StepFilterHasAttr,
        /// <summary>
        /// 属性值是否包含指定字符串。xml中name="attrName"指定属性名，value指定包含的字符串
        /// </summary>
        StepFilterAttrContains,
        /// <summary>
        /// 有指定的样式类.由xml中的name指定
        /// </summary>
        StepFilterHasClass,
        /// <summary>
        /// 元素自身文本包含指定值
        /// </summary>
        StepFilterOwnTextContains,
        /// <summary>
        /// 元素文本包含指定值
        /// </summary>
        StepFilterTextContains,
        /// <summary>
        /// 元素html包含指定值(script的内容用Text()取不到，用Html()/Data才能取得)
        /// </summary>
        StepFilterHtmlContains,
        /// <summary>
        /// 元素值包含指定值
        /// </summary>
        StepFilterValContains,
        /// <summary>
        /// 删除元素中包含的指定Tag
        /// </summary>
        //FilterRemoveTag,
        #endregion

        #region 过滤获取结果.
        /// <summary>
        /// 获取start,end之间的字符串，不包含start,end字符串
        /// </summary>       
        ResultFilterBetween,        
        /// <summary>
        /// 删除/替换 name/value指定的字符串
        /// </summary>
        ResultFilterReplace,
        /// <summary>
        /// 通过正则表达式获取最终结果 result = match.Result("${result}");
        /// </summary>
        ResultFilterMatch,
        /// <summary>
        /// 从最终的结果字符串中替换/删除 正则表达式指定的内容. value中是正则表达式, name是要替换的值
        /// </summary>
        ResultFilterReplaceByRegex,
        #endregion
        
        #region 结果字符串解析规则
        /// <summary>
        /// 从指定属性中获取结果
        /// </summary>
        ResultInAttr,
        /// <summary>
        /// 从Tag标签的Text()获取结果。从Elements[0]中获取文本
        /// </summary>
        ResultInText,
        /// <summary>
        /// 从所有Elements中获取文本
        /// </summary>
        ResultInElementsText,
        /// <summary>
        /// 从Tag签的Html()获取结果
        /// </summary>
        ResultInHtml,
        /// <summary>
        /// 从所有Elements中获取Html
        /// </summary>
        ResultInElementsHtml,
        #endregion
        
        /// <summary>
        /// 删除标签
        /// </summary>
        RemoveTag
    }
}
